package model;

import java.sql.SQLException;
import java.util.HashMap;

/**
 * @author Aubry Pirian
 *
 */
public class Stats {
	
	/**
	 * Méthode retournant le nombre de connexions d'un membre à une salle dans une période donnée
	 * @param member	: membre
	 * @param room		: salle visitée
	 * @param beg		: date minimum ( 'day'->jour ; 'month'->mois; 'year'->année )
	 * @param end		: date maximum ( 'day'->jour ; 'month'->mois; 'year'->année )
	 * @return nombre de connexions
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 * @throws SQLException 
	 * @throws NoSuchFieldException : paramètre non valide
	 */
	public static int getMemberConnections(int member, int room, HashMap<String,Integer> beg, HashMap<String,Integer> end) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		Member m;
		try {
			m = new Member(member);
			return m.getConnections(room, beg, end);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	/**
	 * Méthode retournant le nombre de connexions d'un membre dans une période donnée
	 * @param member	: membre
	 * @param beg		: date minimum ( 'day'->jour ; 'month'->mois; 'year'->année )
	 * @param end		: date maximum ( 'day'->jour ; 'month'->mois; 'year'->année )
	 * @return nombre de connexions
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 * @throws SQLException 
	 * @throws NoSuchFieldException : paramètre non valide
	 */
	public static int getMemberConnections(int member, HashMap<String,Integer> beg, HashMap<String,Integer> end) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		try {
			return getMemberConnections(member, -1, beg, end);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	
	/**
	 * Méthode retournant le nombre de connexions d'un membre à une salle, à une date donnée
	 * @param member	: membre
	 * @param room		: salle visitée
	 * @param date		: date de connexion ( 'day'->jour ; 'month'->mois; 'year'->année )
	 * @return nombre de connexions
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 * @throws SQLException 
	 * @throws NoSuchFieldException : paramètre non valide
	 */
	public static int getMemberConnections(int member, int room, HashMap<String,Integer> date) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		Member m;
		try {
			m = new Member(member);
			return m.getConnections(room, date);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	/**
	 * Méthode retournant le nombre de connexions d'un membre à une salle
	 * @param member	: identifiant du membre
	 * @param room		: salle visitée
	 * @return nombre de connexions
	 * @throws NoSuchFieldException : paramètre non valide
	 * @throws SQLException 
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 */
	public static int getMemberConnections(int member, int room) throws NoSuchFieldException, SQLException, ClassNotFoundException {
		try {
			return getMemberConnections(member, room, null);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	/**
	 * Méthode retournant le nombre de connexions d'un membre 
	 * @param member	: identifiant du membre
	 * @param date		: date de la connexion
	 * @return nombre de connexions
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 * @throws SQLException 
	 * @throws NoSuchFieldException : paramètre non valide
	 */
	public static int getMemberConnections(int member, HashMap<String,Integer> date) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		try {
			return getMemberConnections(member, -1, date);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	/**
	 * Méthode retournant le nombre de connexions d'un membre
	 * @param member : identifiant du membre
	 * @return nombre de connexions
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 * @throws SQLException 
	 * @throws NoSuchFieldException : paramètre non valide
	 */
	public static int getMemberConnections(int member) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		try {
			return getMemberConnections(member, -1, null);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	/**
	 * Méthode retournant le nombre de connexions à une salle d'un membre, à une période donnée
	 * @param room		: identifiant de la salle
	 * @param member	: identifiant du membre
	 * @param date		: date de la connexion
	 * @return nombre de connexions
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 * @throws SQLException 
	 * @throws NoSuchFieldException : paramètre non valide
	 */
	public static int getRoomConnections(int room, int member, HashMap<String,Integer> beg, HashMap<String,Integer> end) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		try {
			Member m = new Member(member);
			return m.getConnections(room, beg, end);
		} catch (NoSuchFieldException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (ClassNotFoundException e) {
			throw e;
		}
	}
	
	/**
	 * Méthode retournant le nombre de connexions à une salle, à une période donnée
	 * @param room		: identifiant de la salle
	 * @param date		: date de la connexion
	 * @return nombre de connexions
	 * @throws ClassNotFoundException : impossible d'accéder un driver
	 * @throws SQLException 
	 * @throws NoSuchFieldException : paramètre non valide
	 */
	public static int getRoomConnections(int room, HashMap<String,Integer> beg, HashMap<String,Integer> end) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		Room r;
		try {
			r = new Room(room);
			return r.getConnections(beg, end);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	/**
	 * Méthode retournant le nombre de connexions à une salle d'un membre, à une date donnée
	 * @param room		: identifiant de la salle
	 * @param member	: identifiant du membre
	 * @param date		: date de la connexion
	 * @return nombre de connexions
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 * @throws SQLException 
	 * @throws NoSuchFieldException : paramètre non valide
	 */
	public static int getRoomConnections(int room, int member, HashMap<String,Integer> date) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		try {
			return getMemberConnections(member, room, date);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	/**
	 * Méthode retournant le nombre de connexions à une salle d'un membre
	 * @param room		: identifiant de la salle
	 * @param member	: identifiant du membre
	 * @return nombre de connexions
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 * @throws SQLException 
	 * @throws NoSuchFieldException : paramètre non valide
	 */
	public static int getRoomConnections(int room, int member) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		try {
			return getRoomConnections(room, member, null);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	/**
	 * Méthode retournant le nombre de connexions à une salle d'un membre, à une date donnée
	 * @param room		: identifiant de la salle
	 * @param member	: identifiant du membre
	 * @param date		: date de la connexion
	 * @return nombre de connexions
	 * @throws NoSuchFieldException : paramètre non valide
	 * @throws SQLException 
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 */
	public static int getRoomConnections(int room, HashMap<String,Integer> date) throws NoSuchFieldException, SQLException, ClassNotFoundException {
		Room r;
		try {
			r = new Room(room);
			return r.getConnections(date);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	/**
	 * Méthode retournant le nombre de connexions à une salle d'un membre, à une date donnée
	 * @param room		: identifiant de la salle
	 * @param member	: identifiant du membre
	 * @param date		: date de la connexion
	 * @return nombre de connexions
	 * @throws ClassNotFoundException : impossible d'accéder au driver
	 * @throws SQLException 
	 * @throws NoSuchFieldException : paramètre non valide
	 */
	public static int getRoomConnections(int room) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		try {
			return Stats.getRoomConnections(room, -1, null);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}
	
	
	public static float getGoodAnswers(int member) throws ClassNotFoundException, SQLException, NoSuchFieldException {
		Member m;
		try {
			m = new Member(member);
		} catch (ClassNotFoundException e) {
			throw e;
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
		try {
			return m.getGoodAnswers();
		} catch (SQLException e) {
			throw e;
		} catch (NoSuchFieldException e) {
			throw e;
		}
	}

	
	
	public static void main(String[] args) {
		//FIXME : supprimer ce main
		/*
		System.out.println(Stats.getMemberConnections(0));
		HashMap<String,Integer> date = new HashMap<String,Integer>();
		date.put("year",2008);
		date.put("month",3);
		date.put("day",16);
		System.out.println("2008-03-16 : "+Stats.getMemberConnections(0,date));
		date = new HashMap<String,Integer>();
		date.put("year",2009);
		date.put("month",5);
		date.put("day",2);
		System.out.println("2009-05-02 : "+Stats.getMemberConnections(0,date));
		date = new HashMap<String,Integer>();
		date.put("year",2008);
		date.put("month",3);
		System.out.println("2009-05-02 : "+Stats.getRoomConnections(0,date));
		*/
		HashMap<String,Integer> date1 = new HashMap<String,Integer>();
		date1.put("year",2007);
		date1.put("month",2);
		HashMap<String,Integer> date2 = new HashMap<String,Integer>();
		date2.put("year",2009);
		try {
			System.out.println("Member 0 (02/2007>2009) : "+Stats.getMemberConnections(0,date1,date2));
			System.out.println("Room 0 (02/2007>2009) : "+Stats.getRoomConnections(0,date1,date2));
			System.out.println("Bonnes réponses de Aubry : "+Stats.getGoodAnswers(0)+"%");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		}
	}

}
